package com.eds.service.impl;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName：jiexi
 * @Author: vvSmile
 * @Date: 2025/03/24
 * @Description: 必须描述类做什么事情, 实现什么功能
 */
public class jiexi {
/* *
┌─────────────────┐      1.提交课程信息和图片     ┌────────────────────────┐
│                 │ ─────────────────────────>  │                        │
│     前端页面      │                             │   课程服务               │
│                 │ <───────────────────────────│  (insertCourseService) │
└─────────────────┘      2.立即返回课程ID         └────────────────────────┘
                                                      │
                                                      │ 3.保存课程基本信息
                                                      ▼
                                               ┌──────────────┐
                                               │              │
                                               │    数据库     │
                                               │              │
                                               └──────────────┘
                                                      │
                    ┌─────────────────────────────────┴─────────────────────────────┐
                    │                                                               │
                    ▼                                                               ▼
             ┌──────────────┐                                               ┌──────────────┐
             │ 4.并行上传    │                                               │ 5.并行上传    │
             │  标题图片     │                                               │  内容图片     │
             └──────────────┘                                               └──────────────┘
                    │                                                               │
                    ▼                                                               ▼
             ┌──────────────┐                                               ┌──────────────┐
             │   OSS服务    │                                               │   OSS服务    │
             └──────────────┘                                               └──────────────┘
                    │                                                               │
                    │ 6.上传成功                                                     │ 7.上传成功
                    ▼                                                               ▼
             ┌──────────────────────────────────────────────────────────────────────────────┐
             │                                                                              │
             │                    RabbitMQ消息系统                                           │
             │                                                                              │
             │   ┌─────────────────┐         路由键:course.image          ┌─────────────────┐│
             │   │                 │ ──────────────────────────────────>  │                 ││
             │   │  交换机(Exchange) │                                      │     队列(Queue)  ││
             │   │ course.exchange  │                                      │course.image.queue││
             │   └─────────────────┘                                      └─────────────────┘│
             │                                                                   │          │
             └──────────────────────────────────────────────────────────────────┼──────────┘
                                                                                │
                                                                                │ 8.消费消息
                                                                                ▼
                                                                         ┌──────────────────┐
                                                                         │   消息消费者      │
                                                                         │CourseImageConsumer│
                                                                         └──────────────────┘
                                                                                │
                               ┌────────────────────────────────────────────────┴─────────┐
                               │                                                          │
                               ▼                                                          ▼
                        ┌──────────────┐                                          ┌──────────────┐
                        │ 9.保存图片信息 │                                          │ 10.更新课程表 │
                        │  到OssImage表 │                                          │   相应字段    │
                        └──────────────┘                                          └──────────────┘
                               │                                                          │
                               └────────────────────────┬─────────────────────────────────┘
                                                        │
                                                        ▼
                                                 ┌──────────────┐
                                                 │              │
                                                 │    数据库     │
                                                 │              │
                                                 └──────────────┘
*/

    //RabbitMQ内部处理流程详图
/* *
┌─────────────────────────────────────── RabbitMQ系统 ─────────────────────────────────────────┐
│                                                                                             │
│   ┌─────────────┐                                         ┌─────────────┐                   │
│   │  生产者      │             1.发送消息                   │   交换机     │                   │
│   │(课程服务)     │───────────────────────────────────────> │course.exchange               │
│   └─────────────┘                                         │(主题交换机)   │                   │
│                                                           └─────────────┘                   │
│                                                                  │                          │
│                                                                  │ 2.根据路由键分发            │
│                                                                  │ (路由键:course.image)     │
│                                                                  ▼                          │
│                                                           ┌─────────────┐                   │
│                                                           │    队列      │                   │
│                                                           │course.image.queue             │
│                                                           └─────────────┘                   │
│                                                                  │                          │
│                                                                  │ 3.接收并处理消息            │
│                                                                  ▼                          │
│                                                           ┌─────────────┐                   │
│                                                           │   消费者     │                   │
│                                                           │CourseImageConsumer            │
│                                                           └─────────────┘                   │
│                                                                  │                          │
│                    ┌───────────────────────────────────────────┬─┴─┬─────────────────────┐ │
│                    │                                           │   │                     │ │
│                    ▼                                           ▼   ▼                     ▼ │
│              ┌────────────┐                              ┌─────────┐             ┌─────────┐ │
│              │ 4a.确认消息 │                              │4b.消息重试│             │4c.拒绝消息│ │
│              │   (ACK)    │                              │ (NACK)  │             │(REJECT) │ │
│              └────────────┘                              └─────────┘             └─────────┘ │
│                    │                                           │                     │      │
│                    │                                           │                     │      │
│                    ▼                                           ▼                     ▼      │
│              ┌────────────┐                              ┌─────────┐             ┌─────────┐ │
│              │  从队列移除  │                              │重新入队  │             │进入死信队列│ │
│              │   消息     │                              │        │             │(可选配置) │ │
│              └────────────┘                              └─────────┘             └─────────┘ │
│                                                                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

消息处理状态流转:
┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│             │     │             │     │             │     │             │
│   已发布     │────>│   已投递     │────>│   处理中     │────>│   已确认     │
│             │     │             │     │             │     │             │
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
                          │                   │                   │
                          │                   │                   │
                          ▼                   ▼                   ▼
                    ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
                    │             │     │             │     │             │
                    │  重新入队    │<────│   处理失败   │     │   死信处理   │
                    │ (自动重试)   │     │             │     │ (人工干预)   │
                    └─────────────┘     └─────────────┘     └─────────────┘
*/
/* *
三、执行流程详细说明
前端到服务层流程
    用户提交请求：用户在前端页面填写课程信息，上传标题图片和内容图片，点击提交
    服务层处理：后端接收请求，对基本信息和图片进行处理
    保存基本信息：将课程基本信息（标题、价格等）保存到数据库
    快速响应：立即向前端返回课程ID，不等待图片处理完成
图片处理流程
    并行处理图片：使用多线程技术（CompletableFuture）并行上传标题图片和内容图片
    标题图片上传：将标题图片上传到OSS对象存储服务
    内容图片上传：同时并行上传多张内容图片到OSS对象存储服务
    消息发送：图片上传成功后，创建消息并发送到RabbitMQ的交换机（course.exchange）
消息队列处理流程
    消息路由：交换机根据路由键（course.image）将消息路由到指定队列（course.image.queue）
    消息消费：CourseImageConsumer监听队列，接收并处理图片消息
    幂等性检查：检查图片是否已经处理过，避免重复处理
    图片信息保存：将图片信息（URL、关联ID等）保存到OssImage表
    更新课程信息：根据图片类型（标题图/内容图）更新课程表中对应字段
消息确认机制
    成功确认：处理成功时，发送ACK确认消息，从队列中移除该消息
    失败重试：处理失败时，根据失败原因和重试次数，发送NACK使消息重新入队
    拒绝处理：当达到最大重试次数或遇到永久性错误时，拒绝消息并记录日志
    通过这种异步消息处理机制，系统实现了前端快速响应与后台可靠处理的平衡，大大提升了用户体验和系统整体性能。
    */
}
